import Foundation

// https://github.com/home-assistant/frontend/blob/92d30a889663008317f7a28faa65beea025f0bfd/src/components/ha-icon.ts
enum MDIMigration {
    // MDI Version number is based on number of icons, so count is directly related to version
    static let migrationNumber: Int = MaterialDesignIcons.count / 1000 - 5

    static func migrate(icon old: String) -> String {
        if let updated = renamed[old] {
            Current.Log.info("migrating \(old) to \(updated)")
            return updated
        } else if removed.contains(old) {
            Current.Log.info("replacing mdi \(old)")
            return MaterialDesignIcons.emoticonSadIcon.name
        } else {
            return old
        }
    }

    private static let renamed = [
        // 5
        "account_badge": "badge_account",
        "account_badge_alert": "badge_account_alert",
        "account_badge_alert_outline": "badge_account_alert_outline",
        "account_badge_horizontal": "badge_account_horizontal",
        "account_badge_horizontal_outline": "badge_account_horizontal_outline",
        "account_badge_outline": "badge_account_outline",
        "account_card_details": "card_account_details",
        "account_card_details_outline": "card_account_details_outline",
        "airplay": "apple_airplay",
        "artist": "account_music",
        "artist_outline": "account_music_outline",
        "audiobook": "book_music",
        "azure": "microsoft_azure",
        "azure_devops": "microsoft_azure_devops",
        "bible": "book_cross",
        "bowl": "bowl_mix",
        "calendar_repeat": "calendar_sync",
        "calendar_repeat_outline": "calendar_sync_outline",
        "camcorder_box": "video_box",
        "camcorder_box_off": "video_box_off",
        "cellphone_settings_variant": "cellphone_cog",
        "chart_snakey": "chart_sankey",
        "chart_snakey_variant": "chart_sankey_variant",
        "coin": "currency_usd_circle",
        "coin_outline": "currency_usd_circle_outline",
        "coins_outline": "circle_multiple_outline",
        "contact_mail": "card_account_mail",
        "contact_mail_outline": "card_account_mail_outline",
        "contact_phone": "card_account_phone",
        "contact_phone_outline": "card_account_phone_outline",
        "cowboy": "account_cowboy_hat",
        "database_refresh": "database_sync",
        "dictionary": "book_alphabet",
        "edge": "microsoft_edge",
        "edge_legacy": "microsoft_edge_legacy",
        "file_document_box": "text_box",
        "file_document_box_check_outline": "text_box_check_outline",
        "file_document_box_minus": "text_box_minus",
        "file_document_box_minus_outline": "text_box_minus_outline",
        "file_document_box_multiple": "text_box_multiple",
        "file_document_box_multiple_outline": "text_box_multiple_outline",
        "file_document_box_outline": "text_box_outline",
        "file_document_box_plus": "text_box_plus",
        "file_document_box_plus_outline": "text_box_plus_outline",
        "file_document_box_remove": "text_box_remove",
        "file_document_box_remove_outline": "text_box_remove_outline",
        "file_document_box_search": "text_box_search",
        "file_document_box_search_outline": "text_box_search_outline",
        "file_settings_variant": "file_cog",
        "file_settings_variant_outline": "file_cog_outline",
        "folder_settings_variant": "folder_cog",
        "folder_settings_variant_outline": "folder_cog_outline",
        "github_circle": "github",
        "google_adwords": "google_ads",
        "hackernews": "y_combinator",
        "hotel": "bed",
        "image_filter": "image_multiple_outline",
        "internet_explorer": "microsoft_internet_explorer",
        "json": "code_json",
        "kotlin": "language_kotlin",
        "library_books": "filmstrip_box",
        "library_movie": "filmstrip_box_multiple",
        "library_music": "music_box_multiple",
        "library_music_outline": "music_box_multiple_outline",
        "library_video": "play_box_multiple",
        "markdown": "language_markdown",
        "markdown_outline": "language_markdown_outline",
        "message_settings_variant": "message_cog",
        "message_settings_variant_outline": "message_cog_outline",
        "microsoft_dynamics": "microsoft_dynamics_365",
        "network_router": "router_network",
        "office": "microsoft_office",
        "onedrive": "microsoft_onedrive",
        "onenote": "microsoft_onenote",
        "outlook": "microsoft_outlook",
        "periodic_table_co": "molecule_co",
        "periodic_table_co2": "molecule_co2",
        "playstation": "sony_playstation",
        "pot": "pot_steam",
        "ruby": "language_ruby",
        "sailing": "sail_boat",
        "scooter": "human_scooter",
        "selection_mutliple": "selection_multiple",
        "settings": "cog",
        "settings_box": "cog_box",
        "settings_outline": "cog_outline",
        "settings_transfer": "cog_transfer",
        "settings_transfer_outline": "cog_transfer_outline",
        "shield_refresh": "shield_sync",
        "shield_refresh_outline": "shield_sync_outline",
        "sort_alphabetical": "sort_alphabetical_variant",
        "sort_alphabetical_ascending": "sort_alphabetical_ascending_variant",
        "sort_alphabetical_descending": "sort_alphabetical_descending_variant",
        "sort_numeric": "sort_numeric_variant",
        "star_half": "star_half_full",
        "storefront": "storefront_outline",
        "syllabary_katakana_half_width": "syllabary_katakana_halfwidth",
        "textarea": "form_textarea",
        "textbox": "form_textbox",
        "textbox_lock": "form_textbox_lock",
        "textbox_password": "form_textbox_password",
        "timer": "timer_outline",
        "timer_off": "timer_off_outline",
        "towing": "tow_truck",
        "visual_studio": "microsoft_visual_studio",
        "visual_studio_code": "microsoft_visual_studio_code",
        "voice": "account_voice",
        "wall_sconce_variant": "wall_sconce_round_variant",
        "wii": "nintendo_wii",
        "wiiu": "nintendo_wiiu",
        "windows": "microsoft_windows",
        "windows_classic": "microsoft_windows_classic",
        "worker": "account_hard_hat",
        "xbox": "microsoft_xbox",
        "xbox_controller": "microsoft_xbox_controller",
        "xbox_controller_battery_alert": "microsoft_xbox_controller_battery_alert",
        "xbox_controller_battery_charging": "microsoft_xbox_controller_battery_charging",
        "xbox_controller_battery_empty": "microsoft_xbox_controller_battery_empty",
        "xbox_controller_battery_full": "microsoft_xbox_controller_battery_full",
        "xbox_controller_battery_low": "microsoft_xbox_controller_battery_low",
        "xbox_controller_battery_medium": "microsoft_xbox_controller_battery_medium",
        "xbox_controller_battery_unknown": "microsoft_xbox_controller_battery_unknown",
        "xbox_controller_menu": "microsoft_xbox_controller_menu",
        "xbox_controller_off": "microsoft_xbox_controller_off",
        "xbox_controller_view": "microsoft_xbox_controller_view",
        "yammer": "microsoft_yammer",
        "youtube_creator_studio": "youtube_studio",

        // 6
        "apple_airplay": "cast_variant",
        "application": "application_outline",
        "application_cog": "application_cog_outline",
        "application_settings": "application_settings_outline",
        "bolnisi_cross": "cross_bolnisi",
        "boom_gate_up": "boom_gate_arrow_up",
        "boom_gate_up_outline": "boom_gate_arrow_up_outline",
        "boom_gate_down": "boom_gate_arrow_down",
        "boom_gate_down_outline": "boom_gate_arrow_down_outline",
        "buddhism": "dharmachakra",
        "cellphone_android": "cellphone",
        "cellphone_erase": "cellphone_remove",
        "cellphone_iphone": "cellphone",
        "celtic_cross": "cross_celtic",
        "christianity": "cross",
        "christianity_outline": "cross_outline",
        "do_not_disturb_off": "minus_circle_off",
        "do_not_disturb": "minus_circle",
        "face": "face_man",
        "face_outline": "face_man_outline",
        "face_profile_woman": "face_woman_profile",
        "face_shimmer": "face_man_shimmer",
        "face_shimmer_outline": "face_man_shimmer_outline",
        "file_pdf": "file_pdf_box",
        "file_pdf_outline": "file_pdf_box",
        "file_pdf_box_outline": "file_pdf_box",
        "flash_circle": "lightning_bolt_circle",
        "floor_lamp_variant": "floor_lamp_torchiere_variant",
        "gif": "file_gif_box",
        "gradient": "gradient_vertical",
        "hand": "hand_front_right",
        "hand_left": "hand_back_left",
        "hand_right": "hand_back_right",
        "hinduism": "om",
        "iframe": "application_brackets",
        "iframe_outline": "application_brackets_outline",
        "iframe_array": "application_array",
        "iframe_array_outline": "application_array_outline",
        "iframe_braces": "application_braces",
        "iframe_braces_outline": "application_braces_outline",
        "iframe_parentheses": "application_parentheses",
        "iframe_parentheses_outline": "application_parentheses_outline",
        "iframe_variable": "application_variable",
        "iframe_variable_outline": "application_variable_outline",
        "islam": "star_crescent",
        "judaism": "star_david",
        "laptop_chromebook": "laptop",
        "laptop_mac": "laptop",
        "laptop_windows": "laptop",
        "monitor_clean": "monitor_shimmer",
        "pdf_box": "file_pdf_box",
        "pharmacy": "mortar_pestle_plus",
        "plus_one": "numeric_positive_1",
        "poll_box": "chart_box",
        "poll_box_outline": "chart_box_outline",
        "sparkles": "shimmer",
        "tablet_ipad": "tablet",
        "teach": "human_male_board",
        "television_clean": "television_shimmer",
        "text_subject": "text_long",
        "twitter_retweet": "repeat_variant",
        "voice_off": "account_voice_off",
        "xamarian_outline": "xamarian",

        // 7
        "android-messages": "message-text",
        "book-variant-multiple": "bookmark-box-multiple",
        "desktop-mac-dashboard": "monitor-dashboard",
        "desktop-mac": "monitor",
        "diving-scuba": "diving-scuba-mask",
        "email-receive-outline": "email-arrow-left-outline",
        "email-receive": "email-arrow-left",
        "email-send-outline": "email-arrow-right-outline",
        "email-send": "email-arrow-right",
        "format-textdirection-l-to-r": "format-pilcrow-arrow-right",
        "format-textdirection-r-to-l": "format-pilcrow-arrow-left",
        "globe-light": "globe-light-outline",
        "google-controller-off": "controller-off",
        "google-controller": "controller",
        "lecturn": "lectern",
        "mosque": "mosque-outline",
        "receipt-outline": "receipt-text-outline",
        "receipt": "receipt-text",
        "silo": "silo-outline",
        "tablet-android": "tablet",
        "text-to-speech-off": "microphone-message-off",
        "text-to-speech": "microphone-message",
        "timeline-help-outline": "timeline-question-outline",
        "timeline-help": "timeline-question",
        "vector-point": "vector-point-select",
    ]

    private static let removed = Set([
        // 5
        "accusoft",
        "amazon_drive",
        "android_head",
        "basecamp",
        "beats",
        "behance",
        "blackberry",
        "cisco_webex",
        "disqus_outline",
        "dribbble",
        "dribbble_box",
        "etsy",
        "eventbrite",
        "facebook_box",
        "flattr",
        "flickr",
        "foursquare",
        "github_box",
        "github_face",
        "glassdoor",
        "google_adwords",
        "google_pages",
        "google_physical_web",
        "google_plus_box",
        "houzz",
        "houzz_box",
        "instapaper",
        "itunes",
        "language_python_text",
        "lastfm",
        "linkedin_box",
        "lyft",
        "mail_ru",
        "mastodon_variant",
        "medium",
        "meetup",
        "mixcloud",
        "mixer",
        "nfc_off",
        "npm_variant",
        "npm_variant_outline",
        "paypal",
        "periscope",
        "pinterest_box",
        "pocket",
        "quicktime",
        "shopify",
        "slackware",
        "square_inc",
        "square_inc_cash",
        "steam_box",
        "strava",
        "tor",
        "tumblr",
        "tumblr_box",
        "tumblr_reblog",
        "twitter_box",
        "twitter_circle",
        "uber",
        "venmo",
        "vk_box",
        "vk_circle",
        "wunderlist",
        "xda",
        "xing_box",
        "xing_circle",
        "yelp",

        // 6
        "adobe_acrobat",
        "adobe",
        "amazon",
        "amazon_alexa",
        "android_auto",
        "android_debug_bridge",
        "bandcamp",
        "battlenet",
        "blogger",
        "buffer",
        "cash_usd_outline",
        "cash_usd",
        "concourse_ci",
        "currency_usd_circle",
        "currency_usd_circle_outline",
        "douban",
        "google_photos",
        "home_currency_usd",
        "microsoft_edge_legacy",
        "microsoft_yammer",
        "telegram",
        "untappd",
        "vk",
        "xing",
        "y_combinator",

        // 7
        "discord",
        "google-home",
    ])
}
